namespace designpatternsplus.contracts
{
    #region

    using System;
    using System.Runtime.Serialization;

    #endregion

    /// <summary>
    /// A contract for a sellable tangible good (not service). 
    /// </summary>
    public interface IProductService
    {
        /// <summary>
        /// Gets the type of the sales item.
        /// </summary>
        /// <value>The type of the sales item.</value>
        ProductType Type { get; }

        /// <summary>
        /// Gets or sets the quantity.
        /// Not used in this example but
        /// is inferred
        /// </summary>
        /// <value>The quantity.</value>
        int Quantity { get; set; }

        /// <summary>
        /// Gets a value indicating whether this instance is imported.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is imported; otherwise, <c>false</c>.
        /// </value>
        bool IsImported { get; }

        /// <summary>
        /// Gets the shelf amount.
        /// </summary>
        /// <value>The shelf amount.</value>
        double BaseAmount { get; }

        /// <summary>
        /// Gets the sku (Unique ID) for the item
        /// </summary>
        /// <value>The sku.</value>
        string Sku { get; }

        /// <summary>
        /// Gets the 'Label' if you will
        /// of the item
        /// </summary>
        /// <value>The master facts.</value>
        ISkuDetails MasterDetails { get; }

        /// <summary>
        /// Gets the amount via the tax decorators
        /// </summary>
        /// <returns></returns>
        double Amount();

        /// <summary>
        /// Require overload on the string
        /// </summary>
        /// <returns></returns>
        String ToString();
    }
}